#include "IOperator.h"

IOperator::IOperator(IFunction *f)
{
    (this->funcao) = f;
    (this->prox) = NULL;
}

void IOperator::setFunction(IFunction *f)
{
    // Deleta o antigo objeto "IFunction":
    delete (this->funcao);
    // Seta o novo objeto "IFunction":
    (this->funcao) = f;
}

IFunction* IOperator::getFunction()
{
    return(this->funcao);
}
void IOperator::setProx(IOperator *op)
{
    (this->prox) = op;
}

IOperator* IOperator::getProx()
{
    return(this->prox);
}

void IOperator::setParam(int param)
{
    // Tentando fazer um casting para função com parâmetro:
    IFuncParam *fp = dynamic_cast<IFuncParam*>(this->getFunction());
    // Se "fp" for nulo, então a função NÃO é uma função com parâmetro:
    if(fp != NULL) fp->setParam(param);
    // Debug:
    //cout<<"param = "<<param<<" / fp = "<<fp<<endl;
}
